100 DIM oi(30),oh(30),oj(30),xi(30),ei(30),ot(10),xt(10),gt(10),et(10),od(10),xd(10),gd(10),ed(10),ok(4),ol(4),om(4),xl(4),el(4),ks(4),kd(4),kw(4),kc(4),kf(4),kl(4)
110 DIM p(16),d(16,6),v(75),c(60),a$(9),ab$(6),f(50)
120 LINE INPUT "Your name :";cn:FOR i=1 TO INT(RND*500):y=INT(RND):NEXT:commfile="sword_comment.dat"
122 PRINT:LINE INPUT "Is sword_comment.dat copied to ram ?";c
125 IF c="y" OR c="Y" THEN commfile="ram:"+commfile
140 FOR i=0 TO 50:f(i)=0:NEXT:nc=60:f(21)=1:f(31)=1:f(37)=3:f(1)=1:f(2)=11
160 OPEN "i",1,"sword_item.dat"
170 INPUT#1,n:FOR i=1 TO 30:INPUT#1,oh(i),oi(i),oj(i),xi(i),ei(i):NEXT:CLOSE
172 OPEN "i",1,"sword_verb.dat"
175 FOR i=0 TO 75:INPUT#1,v(i):NEXT:FOR i=1 TO nc:INPUT#1,c(i):NEXT:CLOSE:p(0)=c(55):FOR i=1 TO 4:d(0,i)=1000:NEXT
3070 IF f=1 THEN INPUT "# ";f:PRINT c(f):GOTO 3000
3080 INPUT "# ";f,y:GOSUB 2100:GOTO 3000
3090 PRINT "exit to : c/cr/r/pc/l/e":INPUT fx:RETURN
3099 'n,s,e,w,u,d
3100 f(4)=f(4)+1:IF d(f(2),x1)>0 THEN 3150
3110 'can't go in dark
3112 IF d(f(2),0)<19 THEN 3120
3114 IF f(8)=1 THEN 3120
3116 IF INT(RND*2+1)=2 THEN 3120
3118 f=21:y=6:GOSUB 2100:f(9)=f(1):RETURN
3120 PRINT c(9):RETURN
3149 'pre-condition for move
3150 IF d(f(2),x1)=1000 THEN f(2)=0:fx=2:RETURN
3151 IF d(f(2),x1)=999 THEN f=43:y=4:GOSUB 2100:f(9)=3:RETURN
3152 IF d(f(2),x1)=998 THEN PRINT :f=23:y=11:GOSUB 2100:f=67:y=2:GOSUB 2100:RETURN
3155 IF d(f(2),x1)=997 THEN IF f(11)<4 THEN f=73:y=6:GOSUB 2100:RETURN ELSE f(2)=13:fx=2:RETURN
3180 IF xl(4)=55 THEN x1=4:GOSUB 2765:RETURN
3190 f(2)=d(f(2),x1):fx=2:RETURN
3200 x1=x1-6:GOTO 3100
3210 '
3290 'save & restore
3300 fx=1:cm="":PRINT c(54);:LINE INPUT cm
3310 IF LEN(cm)>8 THEN f=6:y=1:GOSUB 2100:GOTO 3300
3320 IF cm="" THEN cm="sword.save"ELSE cm=cm+".save"
3330 CLOSE:IF x1=15 THEN 3400
3340 ON ERROR GOTO 3500
3350 OPEN "o",1,cm
3360 FOR i=1 TO 50:PRINT#1,f(i):NEXT
3361 FOR i=1 TO 30:PRINT#1,CHR$(34)oh(i)CHR$(34)","CHR$(34)oj(i)CHR$(34)","xi(i):NEXT:FOR i=1 TO 10:PRINT#1,xt(i):NEXT:FOR i=1 TO 10:PRINT#1,xd(i):NEXT:FOR i=1 TO 4:PRINT#1,CHR$(34)ok(i)CHR$(34)","CHR$(34)om(i)CHR$(34)","xl(i):NEXT
3370 FOR i=1 TO 16:PRINT#1,d(i,0):NEXT:CLOSE:PRINT c(10):GOSUB 2060:GOTO 3540
3390 '
3400 ON ERROR GOTO 3500
3410 OPEN"i",1,cm:INPUT#1,f:CLOSE
3414 IF f>5 THEN PRINT c(51):GOSUB 2060:GOTO 3510
3420 IF f<>f(1) THEN f(1)=f:f(5)=1:GOSUB 180
3430 OPEN"i",1,cm
3440 FOR i=1 TO 50:INPUT#1,f(i):NEXT:FOR i=1 TO 30:INPUT#1,oh(i),oj(i),xi(i):NEXT
3441 FOR i=1 TO 10:INPUT#1,xt(i):NEXT:FOR i=1 TO 10:INPUT#1,xd(i):NEXT:FOR i=1 TO 4:INPUT#1,ok(i),om(i),xl(i):NEXT
3450 FOR i=1 TO 16:INPUT#1,d(i,0):NEXT:CLOSE:PRINT c(10):GOSUB 2060:fx=2:GOTO 3540
4620 f(4)=f(4)+1:IF x2<0 THEN f=8:y=1:GOSUB 2100:RETURN
4621 'take creature alive
4622 IF x1=1 AND f(1)=1 THEN GOSUB 2750:f(9)=1:RETURN
4630 f=8:y=2:GOSUB 2100:RETURN
4640 '
4650 GOSUB 2400:IF x2=0 THEN GOSUB 2950:RETURN ELSE f=8:y=3:GOSUB 2100:RETURN
4690 'drop & put
4700 x3=x1:GOSUB 2200:IF x2<>0 THEN 4750
4710 GOSUB 2300:IF x2=0 THEN GOSUB 2400:IF x2=0 THEN GOSUB 2500:IF x2=0 THEN GOSUB 2950:RETURN
4720 f=8:y=3:GOSUB 2100:RETURN
4750 IF x2>0 THEN f=10:y=1+INT(RND*2+1):GOSUB 2100:RETURN
4755 ON x3-47 GOTO 4800,4800,2000,7400,7500,7550,2000:STOP
4760 'pre-condition for drop
4800 x3=x1:x4=x2:c=MID$(a$(3),1,3):IF NOT(c=c(21) OR c=c(22)) THEN 4900
4810 c=MID$(a$(4),1,3):IF c="" THEN 4900
4815 GOSUB 2300:IF x2<>0 THEN 4850
4817 GOSUB 2400:IF x2<>0 THEN IF f(1)<>2 THEN f=10:y=5:GOSUB 2100:RETURN ELSE IF x1=0 THEN GOSUB 2990:RETURN ELSE IF x1=1 THEN GOSUB 4990:IF x3=8 THEN xi(8)=f(3):RETURN ELSE xi(x3)=999:RETURN
4820 GOSUB 2200:IF x2=0 THEN GOSUB 2500:IF x2=0 THEN GOSUB 2960:RETURN
4830 IF x1=0 THEN GOSUB 2990:RETURN ELSE PRINT c(11):RETURN
4850 IF x1=0 THEN GOSUB 2990:RETURN
4860 IF gt(x1)>1000 THEN 4950
4870 IF gt(x1)=0 THEN f=10:y=4+INT(RND*3+1):GOSUB 2100:RETURN
5600 f(4)=f(4)+1:FOR i=21 TO 26:IF f(i)>0 THEN 5620ELSE NEXT i
5610 f=11:y=7:GOSUB 2100:RETURN
5620 f=12:y=1:PRINT:GOSUB 2100:FOR i=21 TO 26
5625 IF f(i)=0 THEN 5640
5630 PRINT TAB(3)c(i+10)" ";:IF i=21 AND f(20)=0 THEN PRINT c(30);
5632 IF i=22 AND f(8)=1 THEN f=21:y=2:GOSUB 2110
5635 PRINT
5640 NEXT i:RETURN
5690 'move
5700 IF c="" THEN f=15:y=2:GOSUB 2150:PRINT c(37);f(4);c:fx=1:RETURN
5710 GOSUB 2300:IF x2<>0 THEN 5800
5720 GOSUB 2400:IF x2<>0 THEN PRINT c(11):RETURN
5730 GOSUB 2200:IF x2=0 THEN GOSUB 2500:IF x2=0 THEN GOSUB 2950:RETURN
5740 IF x1=0 THEN GOSUB 2980:RETURN ELSE f=12:y=4:GOSUB 2100:RETURN
5800 IF x1=0 THEN GOSUB 2980:RETURN
5810 f(4)=f(4)+1:IF x2<0 THEN f=12:y=4:GOSUB 2100:RETURN
5820 IF f(1)<>1 THEN 5890
5830 IF NOT(x1=3 OR x1=5) THEN 5860
5840 IF f(11)=1 THEN f(11)=0:xd(3)=0:PRINT c(10):RETURN
5850 f(11)=1:xd(3)=-5:x1=3:GOSUB 2760:RETURN
5860 IF x1<>10 THEN f=12:y=6:GOSUB 2100:RETURN
5870 IF f(12)=1 THEN f(12)=0:xd(5)=0:PRINT c(10):RETURN
5880 f(12)=1:xd(5)=-2:x1=5:GOSUB 2760:RETURN
5890 IF f(3)=45 THEN IF x1=9 THEN IF xi(7)=999 THEN xi(7)=45:f=9:y=4:GOSUB 2100:RETURN ELSE f=13:y=1:GOSUB 2100:RETURN
5898 f=12:y=4:GOSUB 2100:RETURN
5899 'write
5900 f=12:y=3:GOSUB 2100:RETURN
5990 'wake
6000 c=MID$(a$(2),1,3):IF c=v(5) THEN a$(2)=a$(3):GOTO 6000
6010 IF c<>"" THEN 6050
6020 f(4)=f(4)+1:IF f(3)>=48 AND f(3)<=59 THEN f=12:y=6:GOSUB 2100:RETURN
6030 'condition to wake up
6040 f=12:y=5:GOSUB 2100:RETURN
6050 GOSUB 2500:IF x2<>0 THEN 6090
6060 GOSUB 2200:IF x2=0 THEN GOSUB 2300:IF x2=0 THEN GOSUB 2400:IF x2=0 THEN GOSUB 2980:RETURN
6070 PRINT c(11):RETURN
6090 IF x1=0 THEN GOSUB 2980:RETURN
6100 f(4)=f(4)+1:IF x2<0 THEN f=10:y=4+INT(RND*3+1):GOSUB 2100:RETURN
6110 'selected creature and location, example dreamland
6120 IF f(3)>=48 AND f(3)<=59 THEN f=12:y=6:GOSUB 2100:RETURN
6180 f=8:y=2:GOSUB 2100:RETURN
6400 GOSUB 2200:IF x2<>0 THEN 6500
6410 GOSUB 2300:IF x2<>0 THEN 6440
6420 GOSUB 2400:IF x2<>0 THEN PRINT c(5);cm" ?":RETURN
6430 GOSUB 2500:IF x2=0 THEN GOSUB 2950:RETURN ELSE PRINT c(11):RETURN
6440 IF x1=0 THEN GOSUB 2980:RETURN
6450 f(4)=f(4)+1 'check for special readable item
6455 IF f(1)<>3 THEN 6490
6460 IF x1=1 OR x1=8 THEN y=2:f=50:GOSUB 2100:f=61:GOSUB 2100:RETURN
6490 f=13:y=5:GOSUB 2100:RETURN
6500 IF x1=0 THEN GOSUB 2980:RETURN
6510 f(4)=f(4)+1:IF x1=5 THEN 6610
6520 IF x1=6 THEN 6710
6530 IF x1=7 THEN 6760
6540 IF x1=12 THEN 6860
6550 IF NOT(x1=2 OR x1=15 OR x1=8 OR x1=1) THEN PRINT c(5);cm" ?":RETURN
6552 IF x1=1 THEN f=18:y=6:GOSUB 2100:RETURN
6554 IF x1=2 THEN IF f(35)=0 THEN f=19:y=2:GOSUB 2150:PRINT c;cn;:y=3:GOSUB 2100:RETURN ELSE IF f(18)=0 THEN f=10:y=5:GOSUB 2100:RETURN ELSE y=3:f=58:GOSUB 2110:f=19:GOSUB 2100:RETURN
6580 f=13:y=5:GOSUB 2100:RETURN
6590 IF x2>0 THEN xi(x1)=0:PRINT a$(2);c(18):oj(x1)=""
6595 RETURN
6609 'bio
6610 GOSUB 6590:IF f(27)=16 THEN f=21:y=1:GOSUB 2100:RETURN
8010 f=73:IF xi(1)=0 AND f(31)=1 THEN y=2:GOSUB 2100ELSE xi(1)=999:f(31)=0
8020 IF xi(4)<>999 THEN f(37)=1:IF xi(4)=0 THEN y=3:GOSUB 2100
8030 IF xi(7)=0 THEN y=4:GOSUB 2100
8040 GOSUB 2650:f=85:y=1:GOSUB 2100:GOSUB 2650:f=86:GOSUB 2100:FOR i=1 TO 11:oj(i)="":NEXT:f(35)=3:f(32)=0:xi(2)=999:xi(3)=999:xi(9)=999:xi(10)=999:xi(11)=999:ol(1)=ot(8):xl(1)=xt(8):f(2)=12:GOSUB 2060:RETURN
8049 'set 4 encounter
8060 IF xl(2)<=0 AND f(3)=60 THEN f(9)=4:f=94:IF f(11)>3 THEN y=2:GOSUB 2100:RETURN ELSE y=1:GOSUB 2100:y=2:GOSUB 2100:RETURN
8062 IF (f(3)>=48 AND f(3)<=60) AND xl(3)<=0 THEN IF f(3)=60 THEN f=94:y=3:GOSUB 2100:f(9)=4:RETURN ELSE IF f(13)<>3 THEN GOSUB 8500:f=96:y=3:GOSUB 2100:RETURN
8064 IF xl(2)=f(3) THEN GOSUB 8100ELSE GOSUB 8200
8065 IF xl(1)=f(3) THEN GOSUB 8300ELSE GOSUB 8400
8070 IF d(f(2),0)>9 AND INT(RND*15+1)<f(12) THEN IF INT(RND*2+1)=1 THEN f=67:y=4:GOSUB 2150:PRINT c;od(d(f(2),0)-4)ELSE f=93:y=3:GOSUB 2150:PRINT c;od(d(f(2),0)-4)
8075 IF d(f(2),0)>=9 AND xl(3)>0 THEN f(12)=f(12)+1
8080 IF (f(12)>30 AND f(13)=0) OR (f(12)>20 AND f(13)>0) THEN GOSUB 8500
8090 RETURN
8099 'meet siva
8100 IF f(11)=2 THEN f(11)=3:PRINT:i=88:j=2:y=1:GOSUB 2120:RETURN
8110 IF f(11)=3 THEN f(11)=4:PRINT:f=90:y=1:GOSUB 2100:xl(3)=60:RETURN
8120 IF f(11)=4 THEN f(11)=5:PRINT:f=90:y=2:GOSUB 2100:f=91:y=1:GOSUB 2100:GOSUB 2060:PRINT:i=92:j=2:y=1:GOSUB 2120:f=89:y=2:GOSUB 2100:RETURN
8130 IF f(11)=5 THEN f(11)=6:PRINT:f=73:y=5:GOSUB 2100:RETURN
8135 IF f(11)=6 AND INT(RND*2+1)=1 THEN PRINT:f=93:y=2:GOSUB 2100:RETURN
8140 IF f(11)=7 THEN f(11)=11:PRINT:f(6)=f(6)+5:f=75:y=2:GOSUB 2100:f=11:y=3:GOSUB 2100:GOSUB 2060:i=86:j=2:y=2:GOSUB 2120:f(2)=6:xl(3)=55:GOSUB 2060:CLS:f=94:y=4:GOSUB 2100:PRINT:RETURN
8150 IF f(11)=8 THEN f(11)=9:PRINT:f=71:y=3:GOSUB 2100:RETURN
8155 IF f(11)=9 AND INT(RND*3+1)=1 THEN PRINT:f=71:y=3:GOSUB 2100:RETURN
8160 IF f(11)=10 THEN f(11)=6:PRINT:f=74:y=3:GOSUB 2100
8170 RETURN
8200 IF f(11)=0 THEN f(11)=1:RETURN
8210 IF f(11)=1 THEN f(11)=2:xl(2)=60:PRINT:f=87:y=1:GOSUB 2100:RETURN
8220 IF f(11)=9 THEN f(11)=10:RETURN ELSE RETURN
8290 'meet xorr
8300 IF f(13)=0 THEN f(13)=1:f=95:y=1:GOSUB 2100:f=96:GOSUB 2100:f(12)=0:xi(2)=55:xl(1)=49:xl(3)=49:xl(4)=55:fx=9:FOR i=2 TO 5:d(i,0)=d(i+6,0):d(i+6,0)=9:NEXT:GOSUB 2060:RETURN
8310 IF f(13)=1 THEN f(13)=2:f=96:y=2:GOSUB 2100:RETURN
8320 IF f(13)=2 THEN f=97:y=1:GOSUB 2100:GOSUB 8500:RETURN
8330 IF f(13)=4 THEN f(13)=5:f=97:y=2:GOSUB 2100:RETURN
8340 IF f(13)=5 THEN f=97:y=3:GOSUB 2100:f(9)=4:GOSUB 8500
8350 RETURN
8400 IF f(13)=2 OR f(13)=4 OR f(13)=5 THEN f=96:y=3:GOSUB 2100:GOSUB 8500
12130 IF f(13)=1 THEN f=17:y=7:GOSUB 2100:RETURN ELSE f(13)=1:f=9:y=4:GOSUB 2100:xi(5)=1:RETURN
12140 IF f(14)=2 THEN f=18:y=1:GOSUB 2100:RETURN
12145 IF f(14)=1 THEN f(14)=2:f=9:y=4:GOSUB 2100:xi(3)=9:f(6)=f(6)+5:RETURN ELSE f(14)=1:f=9:y=4:GOSUB 2100:xl(3)=9:RETURN
12148 IF f(15)=1 THEN f(15)=f(15)+1:f=9:y=4:GOSUB 2100:xl(4)=2:RETURN
12150 IF f(15)<>2 THEN f(15)=f(15)+1:f=17:y=5:GOSUB 2150:PRINT c(29);c:RETURN ELSE f(15)=f(15)+1:f=9:y=4:GOSUB 2150:PRINT c(28);c:xi(7)=2:RETURN
12160 IF xl(3)>0 THEN f=82:y=4:GOSUB 2100:RETURN ELSE 12100
12170 IF f(14)=0 THEN f(14)=1:f=9:y=4:GOSUB 2100:xi(10)=f(3):RETURN
12180 IF f(14)=1 THEN f(14)=2:IF xi(3)=999 THEN f=9:y=4:GOSUB 2100:xi(3)=f(3):RETURN
12190 f=18:y=1:GOSUB 2100:RETURN
12200 IF f(14)=2 THEN f=9:y=3:GOSUB 2100:RETURN ELSE f=8:y=4:GOSUB 2100:RETURN
12210 f=54:y=3:GOSUB 2100:RETURN
12220 IF xl(3)>0 THEN f=61:y=4:GOSUB 2100:RETURN ELSE f=65:y=3:GOSUB 2100:RETURN
12230 IF f(3)=66 THEN IF f(18)=0 OR f(18)=2 THEN xd(1)=-66:f=59:y=4:GOSUB 2100:IF f(18)=0 THEN f(18)=1:gd(1)=1019:f(17)=2:RETURN ELSE f(18)=3:gd(1)=9:gd(3)=2:f(6)=f(6)+5:RETURN
12233 IF f(3)=68 THEN IF f(17)=0 OR f(17)=2 THEN xd(2)=-68:f=59:y=4:GOSUB 2100:IF f(17)=0 THEN f(17)=1:gd(2)=1019:f(18)=2:RETURN ELSE f(17)=3:gd(2)=9:gd(3)=5:f(6)=f(6)+5:RETURN